home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 45
/
Aminet 45 (2001)(GTI - Schatztruhe)[!][Oct 2001].iso
/
Tools
/
Docs
/
lha
< prev
next >
Wrap
Text File
|
1993-12-23
|
116KB
|
3,002 lines
LhA User's Guide
Version 1.38 - August 1992
### ### ######
## ## ### ##
## ## ## ###
## ##### #######
## ## ### ## ##
### ## ## ## ## ##
####### ### ### ### ###
Written by Stefan Boberg
Copyright (c) 1991,92 by Stefan Boberg
All rights reserved
V1.38 LhA User's Guide Page 1
1 - Introduction
LhA is a powerful archiver for the Commodore-Amiga computer.
It is fully compatible with LHA for MSDOS systems and LhArc for
MSDOS, Amiga and *NIX. It is also compatible with LhArcA, LZ and
LhArc for the Amiga. LhA sports fast compression and
decompression and has several commands and options not found in
any other currently available archiver for the Amiga.
1.1 About the manual
The manual is divided into two main sections, the first
section (this one) contains miscellaneous information related to
the program. The second section is a reference section, where all
commands and options are explained thoroughly. For information
about registering read `LICENSE.man' and `Orderform'.
1.2 System requirements
LhA will run on any Amiga system with at least 512KB RAM and
one diskdrive, though 1MB RAM and two diskdrives or harddrive is
recommended to get the most out of LhA. LhA will run on any
KickStart from version 1.2 and up. If LhA is used on a system
with the new KickStart 2.x it will adapt to this and utilize
features new to this release. Special care has been taken in the
program design to make the program execute as fast as possible on
68020, 030 and 040-processors without sacrificing 68000
compatibility.
Under KickStart 1.3, LhA requires `arp.library' to be able to
use other wildcard characters than `*' and `?'.
1.4 Terminology
ARCHIVE - An archive is a file containing one or more files in a
compressed or non-compressed state and related information like
file names, last modification date/time, filenotes etc.
COMPRESSION - The process of encoding redundant information into
data requiring less storage space. There are a multitude of ways
you can do this in. LhA uses a modified version of Lempel-Ziv
compression with block-adaptive Huffman coding and a dictionary
size of 4096 or 8192 characters.
COMPRESSION RATIO - The compression ratio figures reported by LhA
are calculated as follows: ratio = (1 - (CompressedSize) /
(OriginalSize)) * 100. I.e how many percent of the file that was
GAINED. Other archivers may use other methods. LHA and ARJ for
MS-DOS, for example, calculates the ratio as: ratio =
(CompressedSize) / (OriginalSize), i.e. how large the compressed
file is compared to the original file. (MSDOSratio =
1-(ADOSratio/100)). The higher the LhA compression ratio is, the
V1.38 LhA User's Guide Page 2
better the compression. Most Amiga archivers use the same ratio
calculation method as I use.
CRC - CRC stands for `Cyclic Redundancy Check'. It is a
relatively sophisticated method of checking data integrity. The
version used in LhA is a 16-bit CRC.
EXTRACTION or DECOMPRESSION - The process of recreating the exact
information that was previously compressed (file contents,
modification date, filenotes, protection flags, directory
structure etc.)
SELF-EXTRACTION MODULE (SFX-Module) - This is an archive that is
an executable file capable of extracting self-contained files.
1.5 LhA - what is it?
LhA is a file archiving program written especially for the
Commodore Amiga computer. The primary goal is to provide the
Amiga community with a fast, efficient and reliable file
archiver. LhA creates and processes archive files with the '.LZH'
suffix, and is fully compatible with both MSDOS LhArc and MSDOS
LhA, as well as the Amiga LhArc, LZ, and LhArcA. It handles both
the old LhArc-style compression (-lh1-, -lh0-) and the new
LHA-style (-lh5-, -lh4-).
LhA is at the time of release by far the fastest LhArc archive
handler, and is more reliable and robust than both LZ and LhArc.
Neither LZ nor LhArc even comes close to the speed of LhA. The
compression and decompression routines are written entirely in
very optimized 68000 assembly language. The routines were written
directly from scratch in pure 68000 assembler, and did not, as in
the other Amiga LZH/LHA-archivers, start as compiled C-code.
Because of this, the routines are both smaller and, more
importantly, faster than they would have been if I'd used
compiler output as source material. You can get an idea of how
fast LhA is compared to other archivers by looking at the speed
test results in `benchm.txt'. An even better way to see how fast
LhA is, is to try it yourself!
1.6 What is a file archiver anyway?
A file archiver, as the name implies, archives files. It
collects the files you specify and stores them all in a single
archive-file. Almost all file archivers (including LhA) also
compress the files before putting them in the archive-file, so
that they occupy less diskspace. When you wish to retrieve some
file from the archive, the archiver decompresses the file and
restores it's file attributes (Last modification date, time, file
comments, protection status etc.). A file archiver can usually
also process archive files in different ways, for instance delete
V1.38 LhA User's Guide Page 3
files, freshen files, print files etc. See the 'ARCHIVER
COMMANDS' section of this manual for an explanation of the
different actions LhA is capable of performing.
The most common use for a file archiver is for transferring
several related files via modem. It would be a very tedious and
cumbersome task to transfer for instance every single source file
of a big project separately, so why not put them all into one
single file? This is where the file archiver comes in, we simply
feed the archiver with all the files we wish to transmit, and
then just transfer the single archive-file the archiver then
creates! After the transfer the receiver just has to use the
archiver to extract all files from the archive-file onto his/hers
harddisk (or floppy). Also, if the files were compressed by the
archiver, it would take less time to transfer the files as well,
which means the phonecall will cost us less. There are of course
other uses for a file archiver, you can use it as a
harddisk-backup program for example (if you have another harddisk
partition to put the archive file on..), and you can use it to
stuff away files you don't use very often, and then when you want
to use them you simply extract the files from the archive, and
then delete them when you're finished (saves disk space).
Personally I use LhA a lot to make automatic backups of my source
codes for various projects.
The file compression methods vary from very simple, less
effective, and fast (Run-Length Encoding, RLE, for instance), to
complex, effective and relatively time-consuming methods
(Lempel-Ziv-Huffman, LZHUF, as used in LhA). The method used in
LZH-Archivers (LZHUF) is to date probably the best algorithm used
in an archiver. There are other similar methods, like ZIP, but
they are not as good. Even though the files become smaller you
don't lose any information when compressing them, the information
is just stored in a different way. Basically, redundant
(repeated) information is replaced with a pointer to some other
part of the file, where this information is located. For example
in this text the word 'archive' appears at several places, this
is an example of redundant data. Simply put, if a file compressor
was to compress this file it would let the first occurence of
'archive' remain unchanged, and then it would replace all other
occurences of 'archive' with a pointer to the first one. When
decompressing the file, the archiver uses these pointers to
restore the file to its original state.
Files which have already been compressed with one technique
can generally not be compressed any further by feeding them to
the same file compressing program again (If that had been
possible, modem transfers would have been a lot cheaper :), since
the redundant information has already been eliminated. It is
possible though to compress files output by certain compressors
(RunLength-Encoders for example) further by feeding them to a
program that uses another method (like LZHUF), since they
V1.38 LhA User's Guide Page 4
eliminate different kinds of redundant information.
1.8 Compatibility and Amiga-specific features
LhA is aimed at full compatibility with LHA V2.13 for MS-DOS,
which is an improvement of the original LhArc V1.13. LhA is also
compatible with LhArc, LhArcA and LZ for the Commodore Amiga
computer. However, LhArc and LhArcA cannot process any archives
with headers of level 1 or 2, or files compressed with the new
LHA compression (-lh5-). LZ 1.92 cannot process archives with
headers of level 2. LHA V2.13 can process all archives created by
LhA.
1.9 About the author program history and future
I, Stefan Boberg - the author of the programs in the LhA
family, am 19 years old and currently studying `applied physics
and electrical engineering', first year, at the Linköping
Institute of Technology. I started working on LhA mainly because
I thought there was no real good archiver for the Amiga, the ones
that existed at the time (June 1991) I began work on it were
either too slow, had loose compression ratios or were
bugged/crippled so that they could not do what I needed an
archiver to do. I use archivers mainly to back up sources for my
various programming projects automatically, and I also use it a
lot to just decompress archives from bulletin board systems and
computer networks. Another reason for doing it was to earn a
little extra money, which I badly need, being a poor student with
a _small_ allowance.. :)
Anyway, I intend to continue developing LhA and the related
programs as long as I can, and will release other, related,
programs as well, like an intuition-driven archiver called `LhI'
for instance. A file system to enable you to treat archives as
directories is also in the pipeline and will be released sometime
in 1992. Other archive formats than LhA-style archives are also
planned to be supported in the filesystem and intuition driven
archiver by means of special resident libraries and handlers.
When these will be finished depends on how much time I can devote
to developing the programs (have to take care of my studies
first).
But this all depends on YOU, if I get a good response and
people register I will continue work on the program. If not,
well, then I might as well drop it for other projects, and just
make minor bugfixes to it instead of continuing development...
It's your choice! If you would like to express your opinions
about the program, or have an idea for a feature you'd like to
see in the next version, please drop me a line via EMail (see
section 3 for addresses) or write a letter. I would really
appreciate it! You MUST report any bugs you find (though I hope
you won't find too many), so I can fix it right away!
V1.38 LhA User's Guide Page 5
2 Reference guide
This section of the manual is intended to be used mostly as a
reference guide when you want to know exactly how a certain
option or command works. If you haven't used LhA before (but
used other archivers), you should at least glance through the
descriptions of all the commands and options to get an idea of
what LhA can do.
2.1 Command line syntax
The command line syntax is as follows:
LhA [-options] <Command> <Archive> [[HomeDir] FileSpec] [@file]
[destdir]
The items in square brackets are optional, and the items in
angle brackets are mandatory. Read the following sections for
exact information on the various items.
2.1.1 Specifying options
Unlike other archivers, LhA lets you specify options anywhere
on the command line. The option specifier is `-' (dash), any
items on the command line that begins with this character are
considered to be option switches. If you want to specify a
filename or something else that begins with a `-' character,
enclose the name in double quotes or use double dashes. For
example, to specify a filename of `-minus', you could write
either `"-minus"' or `--minus'.
If you write `-o' the option `o' is enabled regardless of its
initial state. If you want to disable an option, append a `0'
(zero) after the option, like in `-o0'. If an option is followed
by any other numeric character than `0', the option is enabled.
You can specify multiple options without having a dash in
front of every option character. An example would be `-ox0m',
which would enable option `o', disable option `x' and enable
option `m'. The only exception is options taking multi-digit
numeric arguments, which must be followed by whitespace and
another dash if you want to specify more options (like in `-b32
-ox0m').
2.1.2 Specifying commands
The first non-option argument on the command line MUST be the
command specifier. The commands are case-insensitive (`l' means
the same thing as `L'), and only the first character of the
argument is considered (except for the `vv' command), so you may
use verbose commands such as `list' or `add' instead of `l' and
`a', respectively.
V1.38 LhA User's Guide Page 6
2.1.3 Specifying archives
The archive specification must be the second non-option
argument (the first being the command specification). In most
cases you can specify a pattern here. The exception being the
`m' (move files to archive) command.
2.1.4 Specifying action files
The action files are specified after the archive
specification. The action file specifications may include pattern
matching tokens. Note that, as all other file specifications in
LhA, action file specifications may contain wildcards for
directory names as well - `hd:*/*/dir/*.h' is valid, for
example.
NOTE
If you do not specify any action files, LhA assumes
that you wish to act upon all files in the archive or
in the current directory.
2.1.5 Home directories
Home directories is a new concept introduced with LhA, it
provides an easy way of specifying what parts of pathnames that
should be preserved in the archive. It can also be used to
simplify specifications of mutiple files in the same directory.
It is perhaps best explained with a couple of examples:
EXAMPLE
Example 1:
lha -x a newarc dh0:files/ file1 dir1/file2 dir2/file3
dh0:files2/ *.c
This would add the following files to `newarc.lha':
Added file(s) Stored as
----------------- --------------
dh0:files/file1 file1
dh0:files/dir1/file2 dir1/file2
dh0:files/dir2/file3 dir2/file3
dh0:files2/*.c *.c
Example 2:
lha -r a newarc hd:tmp/ *.c *.h hd:px/ *.s *.snd *.iff
This would add all `.c' and `.h' files in `hd:tmp' and it's
V1.38 LhA User's Guide Page 7
subdirectories, storing pathnames, but excluding the `hd:tmp'
part. For instance, the file `hd:tmp/src/foo/arargh.c' would
be stored in the archive with the name `src/foo/arargh.c'.
Additionally, all `.s', `.snd' and `.iff' files in `hd:px' and
its subdirectories will be added, excluding the `hd:px/' part
of the name.
Homedir specifications must end in `/' or `:', otherwise they
won't be recognized as such.
Homedir specifications may contain wildcards and other pattern
matching tokens.
NOTE
You are not supposed to include the home directory name
in the action file specifications after the home
directory spec. I.e. you should not enter
`devs:printers/ devs:printers/*HP*', but
`devs:printers/ *HP*' is correct.
The home directory remains active for the rest of the
command line or until the next home directory
specification. If you want to set the home directory to
the current directory (as it is from the beginning),
use a single slash (`/') as a home directory
specification. This means you cannot use a single slash
to specify the parent directory, to do this you will
have to add an additional slash (`//' means parent
directory, `///' the parent's parent directory and so
on).
2.1.6 Recursive file collection
When collecting files recursively (by using the -r option with
a or u commands), action file specs are treated somewhat
differently. Home directories work the same way as usual. In
recursive file collection mode, the last node of the action file
specification (i.e. the file name part) is used as a pattern that
is compared to all files in the specified directory and its
subdirectories. Some examples to hopefully clarify the somewhat
fuzzy description:
EXAMPLE
Example 1:
lha -r a myarc *
This will add all files in the current directory and its
subdirectories to `myarc.lha'.
V1.38 LhA User's Guide Page 8
Example 2:
lha -r a myarc *.c *.cpp
Will add all `.c' and `.cpp' files in the current directory
and its subdirectories to `myarc.lha'.
Example 3:
lha -r a myarc ram:work/* hd:tmp/*.c
Will add all files in `ram:work' and its subdirectories - as
well as all `.c' files in `hd:tmp' and its subdirectories - to
`myarc.lha'. The full pathnames will be stored (excluding the
device specification of course).
Example 4:
lha -r a myarc ram:work/ * hd:tmp/ *.c
Will do exactly the same as example 3, but LhA will not store
the `ram:work/' and `hd:tmp/' parts of the filenames in the
archive. (Because of the home directory specifications).
Example 5:
lha -r a myarc ram:dir1 ram:makefile
Will archive all files in the directory `dir1' and its
subdirectories, as well as the file `ram:makefile'.
Example 6:
lha -r a myarc ram:dir1 ram:(makefile)
Will do almost the same as example 5, but will archive ALL
`makefile's in ram: and all it's subdirectories (because of
the parentheses - see note below).
NOTE
Explicitly specified directories (explicitly = without
pattern matching) will be treated as `dirname/*', i.e.
all files in the directory and it's subdirs will be
archived. Explicitly specified files will only be
looked for in the current home directory, unless the
filename is enclosed in parentheses, in which case the
file will be looked for recursively. I have chosen to
implement it this way because LhA can then be used
better together with directory utilities such as
V1.38 LhA User's Guide Page 9
Browser or DirectoryOpus.
2.1.7 Specifying destination directory
You can optionally specify a destination directory for the
files written by the extract commands by writing the desired
directory name anywhere after the archive name on the command
line. If no destination directory is specified, LhA will use the
current directory as the destination. The destination directory
specification must end in `:' or `/', just like home directory
specifications, or LhA would not be able to distinguish directory
names from action file specs.
EXAMPLE
`lha x corpus ram:' would extract the contents of `corpus.lzh'
to ram:.
`lha x project *.c dl:tmp/' would extract the contents of
`project.lzh' to the `dl:tmp' directory.
and so would `lha x project dl:tmp/ *.c'.
NOTE
You can specify a directory that does not already exist
as the destination, LhA will automatically create the
directory for you (without asking first).
2.1.8 `@'-files
`@'-files are files that are treated as if their contents were
written on the command line. They can be used to specify files,
options commands and anything else can be specified on the
command line. An example would be the command `lha -r e arc.lzh
*.[chas] @filelist ram:', which would extract all files matching
`*.[chas]' or the files listed in `filelist' to ram:. Carriage
returns and linefeeds in `@'-files are treated as whitespace.
2.1.9 LhA limitations
LhA has been written to be as flexible as possible, but there
are some limitations that you should be aware of as a user.
o LhA pathnames are currently limited to 255 characters. If you
exceed this limit behaviour is undefined. User reports indicate
that AmigaDOS does not handle pathnames with more than 180-190
characters properly.
o When headers of level 0 are used, filenotes may not be longer
V1.38 LhA User's Guide Page 10
than 230-{filename length (including path)} characters. With
header level 1 or 2 filenotes may be up to 255 characters
(AmigaDOS currently only supports filenotes of max 80
characters so this should not be any problem except with
exceptionally long filenames and paths).
o The number of files in an archive files are only limited by
available disk space. The size of an archive must not exceed
2.147.483.648 bytes (2 Gigabytes); LhA will get VERY confused.
o The number of arguments on the command line is only limited by
available RAM memory and the used shell.
o The allowed number of wildcard-matched files is only limited
by available RAM memory. Any number of files may be extracted
or added to an archive in one go.
o Level 2 headers must not be longer than 1024 characters, or
LhA will not be able to process them.
o Currently LhA only handles multivolume archives with a maximum
of 100 volumes. If you create archives with more than this
number of volumes, behaviour is undefined.
2.2 Environment variables
Under KickStart 2.0 LhA supports both local and global
environment variables. Local variables are not available under
the 1.3 shell. Upon startup LhA looks for the environment
variable `LHAOPTS' and includes this as if it had been typed on
the command line directly after the `LhA' command name. If you
don't want to use the settings from the environment variable, use
the `-I' switch.
EXAMPLE
If you set LHAOPTS to `-N -b64' with the following command:
1> setenv LHAOPTS -N -b64
LhA would not display any file-progress indicator and use a
64K I/O buffer for all following invokations until the machine
is reset or LHAOPTS is changed. If you want to set some
default options that should survive reset and power off, use
the environment variable name `ENVARC:LHAOPTS' instead, like
in:
1> setenv ENVARC:LHAOPTS -b64
This would cause the environment variable LHAOPTS to be set to
`-b64' whenever the machine is rebooted.
V1.38 LhA User's Guide Page 11
2.3 Pattern matching
This section describes how LhA handles pattern matching and
file collection. For a discussion on what commands will accept
file patterns, please refer to section 2.1 (Command line
syntax).
Pattern matching in LhA is always case-insensitive. (i.e. it
doesn't matter if you write names in upper- or lowercase, `a'
will match both `a' and `A'.
2.3.0 Exactly what is pattern matching anyway?
Pattern matching is a means of specifying several files in an
elegant and relatively straightforward manner. Instead of just
lining up all the file names you would like to work on on the
command line (which can be very tedious when a lot of files are
involved) you can use a technique called `pattern matching'.
With this technique you - as the name implies - use the fact that
the names of the files you wish to work on often share certain
characteristics. For example, the names of files containing
C-source almost always end in `.c', so if you would like to add
all C-source files in the current directory you could take
advantage of this fact by specifying a pattern to that matches
these files (in this case such a pattern would be `*.c').
Exactly how these patterns are built up are explained in section
2.3.1 forward. Also read the sections explaining `how to specify
action files' and `how to specify archive files'.
2.3.1 Accepted pattern tokens
LhA accepts all valid KickStart 2.x and 1.x pattern tokens, it
also accepts all ARP tokens (works more or less the same way as
KS2.x).
In the explanations that follow, the term `expression' means
either a single token or character (such as `x' or `?'), or an
alternation (such as `(ab|cd|ef)'), or a character class (such as
`[a-z,A-Z]').
2.3.1.1 Question mark (?)
The question mark matches any one _single_ character. The
question mark is sometimes also referred to as the `wildchar'.
EXAMPLE
`d?' : matches all two-letter names beginning with a `d'
character. For example `dm' or 'd8'.
`ab?d' : matches all four-letter names beginning with `ab' and
ending in `d'. For example `abcd', `abad' and `ab_d'
V1.38 LhA User's Guide Page 12
but not `abd' or `acid'.
`f??' : matches all three-letter names beginning in `f'. For
example `foo', `fel', `fan' but not `ab', `fuga' or
`fini'
2.3.1.2 Star/Asterisk (*)
The star matches any sequence of any length, including
sequences with length zero (i.e. the null string). The `*'
character is often called the `wildcard' character.
EXAMPLE
`a*' : matches all names starting with an `a', for example
`abba', `anette'.
`a*z' : matches `auugaz', `awacz' and `az' and any other names
starting with an `a' and ending in `z'.
`s*f*n' : matches `stefan', `staffan', `steffen', `sfn' or any
other name starting with an `s', followed by any number
(including zero) of arbitrary characters, followed by
an `f', and ending in `n'.
`*.lzh' : matches all names ending in `.lzh'
2.3.1.3 Hash mark (#)
The hash mark matches a subsequent expression (pattern) 0 or
more times. The simplest example of this is `#?' which will
match any filename (equivalent to the `*' token).
EXAMPLE
`#a' : matches any name consisting of the `a' character only.
For example `aaaa' and `a'.
`b#ad' : matches any name beginning in `b', followed by any
number (including 0) of `a' characters, and ending in
`d'. For example `bad', `bd' and `baaaad'.
`#(ha)#(hi)urgh' : of `ha':s followed by any number of `hi':s
followed by `urgh'. For example `hahahahahihiurgh'
matches, and so does `haurgh' and `hahiurgh'.
2.3.1.4 Square brackets ([])
V1.38 LhA User's Guide Page 13
The square brackets enclose a set of characters to match.
They are a bit like the parentheses but match single-characters
only. You can either specify just the letters you would like the
expression to match, as in `[abcx]' (this would match `a', `b',
`c' and `x'), or you can specify ranges, like `[a-c,x-z]' (which
would match `a', `b', `c' and `x', `y', `z').
EXAMPLE
`prg.[1-9]' : matches any five-letter name beginning with
`prg.', followed by a non-zero digit. For example
`prg.1', 'Prg.8'.
`Ver_[1-2].[0-9].[a-z]' : matches any nine-letter name
beginning with `ver_' followed by either a `1' or a `2'
character, followed by a dot (`.'), a digit and finally
a character between `a' and `z' (i.e. all letters in
the english alphabet). For example `Ver_1.2.a',
`Ver_2.9.d'.
`#[a-z 0-9]' matches any name containing any number of
alphanumeric characters (i.e. either in the alphabet
or numeric). For example `ados' or `PDP11'. It does
not match `AXE.dat' however, since it contains a `.'
which is not in the specified character range.
`*.[chas]' : matches any name ending in `.c', `.h', `.a' or
`.s'.
2.3.1.5 Parentheses and the vertical bar
Parentheses can be used to achieve several things. The first
way of using them is just like in mathematics - to group several
individual expressions into one single expression. The other way
is to provide a list of acceptable expressions separated with `|'
chars. The entire parenthesized expression is treated as one
token by other tokens (like `#' and `~'). These two are actually
the same, since the first is just a special case of the second
use. This is easier to explain with a couple of examples:
EXAMPLE
`(abc|def|xyz)' : will match names `abc', `def' and `xyz' and
no other.
`*.(doc|prf|man)' : will match all names ending in `.doc',
`.prf' or `.man'.
`~(pfile)' : will match all names except `pfile'. (NB: this
expression is NOT the same thing as `~pfile', see
section 2.3.1.6 for details)
V1.38 LhA User's Guide Page 14
`(*.c|*.h|*.doc|ab*)' : will match all files ending in `.c',
`.h' or `.doc' and all files beginning with `ab'.
Typing an action-file spec of `(xxx|yyy|zzz)' is functionally
equivalent to writing `xxx yyy zzz' (xxx, yyy, zzz can be any
valid patterns, including patterns with parentheses).
Parentheses can be nested.
2.3.1.6 Tilde (~)
The tilde negates the immediately following expression. It
negates ONLY the immediately following token or paranthesized
expressiom, not the entire following expression as some people
think (see note about ARP<->KS2.0 below).
EXAMPLE
`~x?' : matches any two-letter name except those starting with
`x'. For example `ah', `ko' or 'ba' but not 'x0' or
'xi'.
`~(x?)' : matches anything except two-letter names starting
with `x'. For example `xaa' or `ab' but not `xa' or
'x9'.
`~(#?)' : matches nothing at all. (The tilde negates the
`#?', which matches all names).
`~lha' : matches all strings that doesn't begin with `l', and
ends in 'ha'. For example `uha', `why_lha' but not
'lumbha' or 'lha'.
NOTE
Because of a bug (or misfeature) in ARP, the `~'
token is not correctly handled by LhA when running
under KickStart 1.3 under ARP. Under KS2.x LhA
handles it okay however. In ARP a negation actually
negates the ENTIRE EXPRESSION, so `~lha' matches all
files but `lha'.
2.3.1.7 Percent sign (%)
The percent sign represents the empty string. i.e. it
matches 0 characters always. It is only useful in parenthesized
expressions and must not follow a the `#' token (`#%' would be a
rather pointless pattern, since the % always matches exactly 0
V1.38 LhA User's Guide Page 15
characters).
EXAMPLE
`lha(.doc|.man|%)' : matches `lha.doc', `lha.man' and `lha'.
`l%u%a' : matches `lua' only; the percent signs are totally
irrelevant here and may just as well be omitted.
2.3.2 KS1.3 ARP and KS2.x pattern matching
When running LhA (and other programs for that matter) under
KickStart 2.x, the `*' (star) wildcard will be enabled on program
startup. The initial state of the WILDSTAR flag will not be
reset. If arp.library is not available when running under
KickStart 1.3 LhA will use its internal pattern matching
routines, which only recognizes the `*' and `?' tokens.
2.3.3 National characters
LhA correctly converts national characters to lower- or
uppercase when the `-Qn' option is enabled. This causes some
trouble on older versions of the KickStart since these did not
correctly convert national characters to uppercase when
calculating the filename hash value. The `-Qn' option should not
be used on OFS or FFS disks.
V1.38 LhA User's Guide Page 16
2.4 Commands
This section describes the commands for archive manipulation
and maintenance LhA provides. See section 2.1.2 (Specifying
commands) for details on how to specify commands on the command
line.
2.4.1 `a' Add files to archive
Obviously, this command adds a number of files to one or more
archives. If the specified archive does not already exist, then
it will be created. You cannot add files to an archive if these
already exist in the archive. If you attempt to do so, a warning
will be issued, but LhA will continue adding the other files you
have specified.
Only the filenames are stored by default, if you want to
preserve some disk structure and directory names, you will have
to use the -x option to turn path preservation on. If you want to
archive entire subdirectories recursively you can use the -r
option, which will turn on the -x option automatically. These
options are explained in section 2.5.
EXAMPLE
`LhA a myarchive dict.txt' would add the file `dict.txt' to
the archive `myarchive.lha'.
`LhA a arc.lzh *.c *.h' would cause all files in the current
directory ending in `.c' or `.h' to be added to the archive
`arc.lzh'
`LhA -r -0 arch *.c' would cause all `.c' files in the current
directory and all it's subdirectories to be added to the
archive `arch.lzh' using the -lh1- (LhArc 1.x) compression
method.
`LhA -r archive src:(lharca|lha)/*.[cha] asrc:*.asm' would
cause all `.c', `.h' and `.a' files in the `src:lharca' and
`src:lha' directories and subdirectories, as well as all
`.asm' files in the `asrc:' directory, to be added to the
archive `archive.lha'.
2.4.2 `c' Concatenate/Append archives
With this command it is possible to concatenate several
archives to one or to append several archives to the end of
another. Currently, LhA does not check for duplicate files, so if
two archives contain a file with the same name there will be two
entries with the same name in the resulting archive.
V1.38 LhA User's Guide Page 17
Concatenating and appending works just as if you had extracted
all files from the archives and then moved them all to the
destination archive - except that there is no
decompression/compression involved in the operation.
To combine (concatenate) several archives into a new archive
you specify a non-existant or empty archive as the working
archive - this file will then contain the resultant archive.
To append archives to the end of an archive, specify the
archive to append to as the working archive - the remaining
archives will then be appended to this archive.
EXAMPLE
`LhA c ram:new arc:csrc arc:csrc2' would combine the two
archives `arc:csrc.lha' and `arc:csrc2.lzh' into one archive
named `ram:new.lha'.
`LhA c arc:csrc arc:csrc2' would yield the exact same result
as the above command but the resulting archive is in
`arc:csrc.lha' instead (`csrc2.lzh' is appended to the end of
`arc:csrc.lha').
Note that you can use wildcards to specify the files to append
/ concatenate.
2.4.3 `d' Delete files from archive
This command removes one or more files from an archive. Please
note that the message about `packing' does not mean that LhA
compresses the files once more.. Just that it removes the unused
files from the archive (packs the remaining files closer).
NOTE
Files deleted with the `d' command cannot be recovered
from the archive file in any way. Once a file is
deleted from an archive it is gone forever.
2.4.4 `e' Extract files from archive
This command is used to extract files from an archive. It
works just like the `x' command, except this command takes the
`-x' option into consideration (the `x' command assumes it is
set). If the `-x' option is disabled, files are extracted
without their pathnames, and if it's enabled LhA will extract all
files with the pathnames and create the needed directories if
they do not already exist.
V1.38 LhA User's Guide Page 18
EXAMPLE
`lha -x0 e foo.lzh ram:' will extract all files from the
archive `foo.lzh' to ram:, without paths (all files will be
put in the ram: root directory).
`lha x foo.lzh *.c ram:' will extract all files ending in `.c'
to ram:, with paths - i.e. it will recreate the original
directory structure.
See the tutorial section for more examples
2.4.5 `f' Freshen files in archive
This command is used to freshen files in an archive. I.e.
replace older files in the archive with new files from the
current directory. Pathnames are considered unless the `-x'
option is disabled explicitly (with `-x0'). This command never
adds any files to an archive, it just replaces those files that
have older modification dates than the corresponding files in the
current directory.
EXAMPLE
`lha f /aab/lha' will freshen all files in the archive
'/aab/lha.lha'.
`lha f /aab/fsys *.[ch]' will freshen all `.c' and `.h' files
in the archive '/aab/fsys.lha'.
This command automatically enables the `-x' option unless it
is explicitly disabled on the command line with `-x0'.
2.4.7 `h' Hunt for diffs arc <-> filesys
This command is used to see what files in an archive has been
changed since the files were archived. The `-D' (display type)
option has a special meaning with this command; The listing
format is as follows:
`-D0' (default) : Each differing file is listed with the name
on the right and a `checklist' on the left with x-es in the
appropriate positions indicating what differs between the archive
and the filesystem. `Tm' means the last modification date
differs, `Sz' means the size is different, `Pr' means the
protection bits has changed, `Fn' means the filenote has changed,
and `Del' means the file does not exist anymore.
V1.38 LhA User's Guide Page 19
`-D1' : Every differing file is listed with the name on the
left followed by a brief description of what differs. If more
than one thing differs a new line will be used for each differing
attribute.
`-D2' : As `-D1' but all differing attributes are listed on
the same line.
`-D3' : Only the differing filenames are listed, one on each
line.
If no directory is specified on the command line, LhA assumes you
want to compare the archive to the current directory. The
directory to compare to is specified the same way as the
destination directory with the `e' and `x' commands.
EXAMPLE
`lha h arc:utils.lha sys:utilities/' would compare all files
in the archive `arc:utils.lha' to the corresponding files in
the `sys:utilities' directory, reporting all differences.
`lha -x0 h src:misc #?.c misc:' would compare all files with
names ending in `.c' in the `src:misc.lha' archive to the
corresponding files in the `misc:' directory.
`lha h dl:backup' would compare the files in archive
`dl:backup.lha' to the files and directories in the current
directory.
2.4.8 `l' List archive contents (terse)
This command gives a terse list of the contents of an archive
file, including file names (without paths), original and
compressed length, last modification date and compression ratio.
Files with pathnames are indicated by having a `+' character
in front of the name. See example below.
Filenotes are NOT displayed when using this command, use the
`v' or `vv' command to display those.
The action file specification is used to determine what files
to list. If no filespecs are given, all files will be listed.
EXAMPLE
V1.38 LhA User's Guide Page 20
1> lha -N l dl:c64new
Listing of archive 'dl:c64new.lzh':
Original Packed Ratio Date Time Name
-------- ------- ----- --------- -------- -------------
36098 26979 25.2% 20-Oct-91 22:40:16 +Stormlord
482 293 39.2% 20-Oct-91 22:41:36 +Stormlord.info
23016 12100 47.4% 21-Oct-91 08:28:18 PlaySID
-------- ------- ----- --------- --------
59596 39372 33.9% 25-Oct-91 21:22:48 3 files
The `+' (plus) signs in front of the first two names indicate
that the file has a path which is not displayed with the `l'
command (use the `v' or `vv' command to display pathnames as
well). The `-N' suppresses the copyright notice.
2.4.8.1 `lq' List archive (terse-quick)
This command works just like the `l' command, but the only
information listed is the filenames without paths. Empty
directories are displayed as an empty line.
2.4.9 `m' Move files to archive
This command works just like the `a' command, but the source
files are deleted after successfully adding them to the archive.
EXAMPLE
`lha m includes.lzh src:*.[hi]' will move all files in
directory `src:' having filenames ending in `.h' or `.i' to
the archive `includes.lzh'.
`lha m myarc.lzh lhb_log.911012 lhb_idx.911012' will move the
two specified files (`lhb_log.911012' and `lhb_idx.911012') to
the archive `myarc.lzh'.
2.4.14 `p' Print files to stdout
This command works just like the extract (`e', `x') commands,
but sends the extracted output to stdout (normally the console or
output redirection file).
2.4.15 `r' Replace files
This command works just like the update/add commands but
replaces the files that already exist in the archive regardless
of the file modification time. (Using the `u' command together
V1.38 LhA User's Guide Page 21
with the `-Qr' option is equivalent to using this command).
2.4.17 `t' Test archive integrity
This command tests the specified archives integrity by
extracting the files they contain to nowhereland, i.e. the data
is decompressed only, not written to any file. This command only
works on entire archives, i.e. you cannot just test one file in
an archive. If this command fails, the archive is corrupted, and
a warning return code is returned.
EXAMPLE
`lha t work:arcs/*' will check the integrity of all archives
in directory `work:arcs'.
`lha t s:envarc.lzh' will check the integrity of
`s:envarc.lzh'
`lha -R t dh0:*' will check the integrity of all archives on
the `dh0:' volume (`-R' = Collect archives recursively).
2.4.18 `u' Update archive
As the command name implies, this command updates archives. It
adds files that are not yet in the archive and replaces existing
but older files. The last modification date for files are used to
determine which file is the newest one.
EXAMPLE
`lha u /aab/lha.lzh *.c' will update archive `/aab/lha.lzh'
with all `.c' files in the current directory.
2.4.19 `v' List archive (verbose)
This command works just like the `l' command, but displays the
full pathname of the file, while `l' only displays the name node
without path. Another difference between `l' and the `v'/`vv'
commands is that the `l' command does not show filenotes.
Filenotes are displayed on a separate line with a colon (`:') in
front of it, just like the AmigaDOS `list' command.
The action file specification is used to determine what files
to list. If no filespecs are given, all files will be listed.
EXAMPLE
1> lha -N v dl:c64new
V1.38 LhA User's Guide Page 22
Listing of archive 'dl:c64new.lzh':
Original Packed Ratio Date Time Name
-------- ------- ----- --------- -------- -------------
36098 26979 25.2% 20-Oct-91 22:40:16 S/Stormlord
482 293 39.2% 20-Oct-91 22:41:36 S/Stormlord.info
23016 12100 47.4% 21-Oct-91 08:28:18 PlaySID
: New version with `equalizers'
-------- ------- ----- --------- --------
59596 39372 33.9% 25-Oct-91 21:22:48 3 files
The `-N' suppresses the copyright notice.
2.4.19.1 `vq' List archive (verbose-quick)
This command works just like the `v' command, but the only
information listed is the filenames including path.
2.4.20 `vv' List archive (full)
This command is just like the `v' command, but displays all
available information in a slightly different format. The
original and packed size, last modification date and compression
ratio is listed just as with the `v' command, plus file
attributes (`Atts'), compression method, file CRC and DOS ID for
the OS the files were compressed on. If no DOS ID is given in
the archive (header level < 1), a question mark is displayed.
The most common DOS IDs are `A', `U' and `M', where `A' is for
AmigaDOS, `U' is for **IX and `M' is for MS-DOS. The filename
including path is displayed on a separate line. File notes are
displayed in the same way as the `v' command does it, on a
separate line after the filename. The header level is also
displayed, and if any unhandled extended headers are found, an
`X' will be listed after the DOS ID.
The action file specification is used to determine what files
to list. If no filespecs are given, all files will be listed.
EXAMPLE
1> lha -N vv dl:c64new
Listing of archive 'dl:c64new.lzh':
Original Packed Ratio Date Time Atts Method CRC L OS
-------- ------- ----- --------- -------- -------- ------ ---- -----
S/Stormlord
36098 26979 25.2% 20-Oct-91 22:40:16 ----rwed -lh1- 2093 2 U X
S/Stormlord.info
482 293 39.2% 20-Oct-91 22:41:36 ----rwed -lh1- 710E 2 U X
V1.38 LhA User's Guide Page 23
PlaySID
23016 12100 47.4% 21-Oct-91 08:28:18 ----rwed -lh5- 89FF 0 ?
: New version with `equalizers'
-------- ------- ----- --------- --------
59596 39372 33.9% 25-Oct-91 21:22:48 3 files
The `-N' option suppresses the copyright notice.
2.4.21 `x' Extract files with path
This command works exactly the same as the `e' command, but
it always extracts files with paths (i.e. same as using the
`e' command with `-x' option on), regardless of the state of
the `-x' option.
2.4.22 `y' Copy archive with new options
This command takes an archive as input, and rewrites the
selected (or all, if none specified) files with the new options
given on the command line or in environment variables. This can
often be useful. A couple of examples will surely help to
clarify;
EXAMPLE
`lha -H1 y dl:#?' will convert all archives in the `dl:'
directory to archives with level-1 headers.
`lha -x0 y ram:files.lha *.c' will remove all paths from all
files with names ending in `.c' in the archive
`ram:files.lha'.
NOTE
LhA currently ignores the compression method setting,
so this command cannot be used to re-archive old
-lh1- archives to new -lh5- archives or vice versa.
This will be possible in a future release.
V1.38 LhA User's Guide Page 24
2.5 Options
This section describes the various options that are
available to you when using LhA. For a detailed explanation on
how to enable/disable specific options and where you can
specify options, see section 2.1.1. The letters in parantheses
indicate what commands the options affect.
Code Commands
----- ------------
(add) a,u,f
(all) all commands
(ext) e,x
(upx) a,u,f,e,x
(upd) a,u,f,d
2.5.1 `-a' (upx) Preserve file attributes
This option, when enabled, will make LhA store and restore
file protection flags. The eight attributes are listed below:
r: Read - This flag is set for files which are readable (a
file is read-protected if the flag is unset).
w: Write - This flag is set for files which are writeable
(a file is write-protected if the flag is unset).
e: Execute - This flag is set for files which are
executable (binary load files or shell scripts must have
this bit set).
d: Delete - This flag is set for files which are
deleteable (a file is protected from deletion if this
flag is unset).
a: Archived - This flag is used by harddisk-backup
programs (and optionally LhA) to indicate what files
have been changed since the last backup. If this flag is
set it indicates that the file is unchanged, and if it
is unset the file has changed since the last backup.
The bit is cleared whenever a write is made to the
file.
p: Pure - This flag is set for binary load files which are
pure (i.e. multitasking reentrant), and can be made
resident with the AmigaDOS 'resident' or equivalent
command.
s: Script - This flag is set for shell script files.
h: Hidden - This flag is set for files that should not
V1.38 LhA User's Guide Page 25
show up on directory listings. It is not supported by
the current release of the AmigaDOS shell/CLI commands,
and should thus not be used.
Please refer to an AmigaDOS manual for more detailed
explanation of the various file protection flags.
If the option is disabled (by issuing `-a0' on the command
line), the protection flags are set to '----RWED' for all
extracted and archived files. Important: You MUST have this
option enabled both when archiving and extracting to preserve
file attributes correctly.
NOTE
Use this option only if you know that the archive has
been compressed or will be decompressed with an Amiga
archiver, since the attribute field format is
different on different operating systems. If you use
archive headers of level 1 or higher you need not
care about this since the archiver then detects what
OS the archive was created on and only uses the
protection flags if it is the native OS. Always
leave this option enabled when using archive headers
of level 1 and higher!
This option is enabled by default when archiving (a,f,u,m)
and disabled by default for all other commands.
2.5.2 `-A' (upd) Set archive attributes
When this option is active, LhA will set the file protection
flags of all archives it updates to `----RW-D'.
This option is OFF by default.
2.5.3 `-b' (all) Set I/O buffer size
This option will set the size of the I/O buffers LhA uses
when reading and writing to archive files. You can set the
buffer size to anything from 8KB to 64 KB. Larger buffers
normally makes LhA operate slightly faster (depends on the
nature of the archive and what files are selected).
EXAMPLE
'lha -b64 a archive.lzh hubba' : Will add file `hubba' to
`archive.lzh' using an I/O buffer of 64K.
NOTE
V1.38 LhA User's Guide Page 26
Running LhA with a small I/O buffer on an accelerated
(68020 and up) Amiga will degrade compression /
decompression performance significantly! The default
buffer size of 32KB is enough in most cases, and
works well on an unaccelerated Amiga as well. Also
note that when running LhA and doing all work on some
ram disk, the I/O buffer size is less important, and
it is unnecessary to run with a large buffer. The
default buffer size of 32K is a good choice in most
setups.
The default buffer size is 32K (32768 bytes)
2.5.4 `-B' (upd) Keep backup of archives
When this option is enabled, LhA will always keep a backup
copy of the archive whenever a file is removed from it by the
delete, update, freshen or replace commands. The backup archive
is named `<arcname>.bak' (note that the `.lzh' or `.lha' suffix
is *NOT* replaced by the `.bak' suffix - rather, the `.bak'
suffix is always appended at the end of the filename).
This option is OFF by default.
2.5.5 `-c' (all) Confirm files
When this option is active LhA will ask you for confirmation
on all files and archives that are acted upon.
This option is OFF by default.
2.5.6 `-C' (ext) Clear arc-bit on extract
When this option is active LhA will mask the A-protection
bit for all files it extracts. This is useful when extracting
files from archives to a harddisk, since the extracted files
would not be recognized as new or changed files by the backup
program if the A-bit was set.
This option is ON by default.
2.5.6 `-d' (upd) Archive date=newest file
When this option is active LhA will set the last
modification date of the archive to the same date as the last
modified file in the archive. This more accurately reflects the
real age of the archive contents than the date of the last
archive update.
This option is OFF by default.
V1.38 LhA User's Guide Page 27
2.5.8 `-D' (all) Alternate progress display
This switch is used to change the look of the byte progress
indicator that LhA displays when it is compressing or
decompressing files. There are several different types of
progress indicators, you can specify which one you want with a
digit after the '-D' string.
0: This is the default progress indicator, it displays how
many bytes of the file LhA has processed, and how many bytes
there is in the file like this:
(xxxxxxx/yyyyyyy) where x = bytes processed, and y = total
bytes in the file.
1: This progress indicator simply shows a `rotating line' that
is rotated 45 degrees every time the progress indicator
display is updated).
2: This progress indicator shows how many percent of the file
LhA has processed.
3: This progress indicator displays a growing bar that
indicates how much of the file that has been processed.
EXAMPLE
`lha -D2 a src *.asm' will add files to the archive
`src.lha' with a percentage indicator (type 2).
NOTE
When used with the `h' command this option has a
slightly different meaning. See the section about the
`h' command for a detailed explanation.
The default progress indication type is 0.
2.5.9 `-e' (add) Archive empty directories
When this option is used together with the `-r' (collect
files recursively) option, LhA will archive all empty
subdirectories.
This option is OFF by default (empty subdirectories are not
V1.38 LhA User's Guide Page 28
archived).
2.5.10 `-E' (ext) Touch extracted files
When this option is enabled, LhA will set the file
modification date of all extracted files to the current time.
This can be useful if you do HD backups by date rather than by
archive bit.
This option is OFF by default (the original modification
dates are restored).
2.5.11 `-f' (all) Ignore filenotes
When this option is enabled, LhA will not store or restore
any filenotes. There is no real need to do this, since it does
not cause any compatibility problems with other systems because
of the way the filenotes are stored. If problems should arise
anyway, try enabling this option or use headers of level 1 or
higher if the target system supports it.
See the section about compatibility (1.7) for a discussion
about this and other compatibility issues.
This option is OFF by default (filenotes are stored and
restored)
2.5.12 `-F' (all) Use fast progress display
In this mode LhA uses a different method of display progress
for the extract and test commands. Normally, LhA emits a
linefeed (LF) after each file has been processed, thus
advancing/scrolling the display one line. In this mode LhA only
emits a LF when an error occurs. This is useful if you are
testing or extracting files with a lot of small files, and the
scrolling takes more time than the actual decompression!
NOTE
If you use the default style progress display on a
very fast Amiga system (68020+), beware that the
scrolling of the screen may actually take more time
than the actual decompression! This is especially
true for archives with many small files. So don't
use it unless you really _have_ to see what files
have been processed. LhA scrolls the display
whenever an error occurs on a file, so you still can
see when an error occurs (better, even, since the
only filenames that remain on screen after the action
is complete are those that failed!).
V1.38 LhA User's Guide Page 29
This option is OFF by default (use old style progress
indication).
2.5.13 `-g' (add) Garble files with password
This option is not available in the current version.
2.5.14 `-G' (ext) Only extract newer files
When this option is used LhA will only extract files that
already exists and have a last modification date that is newer
than the existing files.
This option is OFF by default.
2.5.15 `-h' (add) Disable homedirectories
When this option is enabled, the homedirectory specification
feature of LhA is disabled.
This option is OFF by default (homedirectories are
recognized).
2.5.16 `-H' (add) Write header level
With this switch you can select which header types to use.
The valid header levels are currently 0,1 and 2. Please refer
to the section about header levels for a more detailed
explanation about the various header types.
The default header level is 0.
2.5.17 `-i' (all) Read filelist from file
With this option you can include an action file list from a
file instead of specifying all action files on a command line.
EXAMPLE
If the file `ArcFList' contains the following lines:
---> Start of ArcFList data (this line is NOT in the file)
LhA.c ArcList.c FSys/*.(c|h|i|asm|prf|man|doc|txt)
---> End of ArcFList data (this line is NOT in the file)
The following command line:
`lha -iArcFList u /aab/lha.lzh'
Will do the same thing as this command:
V1.38 LhA User's Guide Page 30
`lha u /aab/lha.lzh LhA.c ArcList.c
FSys/*.(c|h|i|asm|prf|man|doc|txt)'
NOTE
This command works almost exactly like entering
the following command line:
LhA ? ???? @file
Thus you can include options in your -i file. The
only difference is that the -i file cannot contain
a destination directory specification while you
can do this with the @file method. The destination
directory will always be taken from the command
line when using the -i option.
See the section about `@'(include)-files for an alternate
way of doing this.
2.5.18 `-I' (all) Ignore LHAOPTS variable
When this option is specified, LhA will not try to read the
defaults from the LHAOPTS local or global environment variable.
Note that this option is special because it has to be specified
directly after a dash (`-') on the command line.
This option is OFF by default.
2.5.19 `-k' (all) Keep partial files
This option will, if it's enabled, prevent LhA from deleting
temporary files when an error occurs. Normally temporary files
that fail the CRC check, cause I/O errors or are interrupted
with CTRL-C are deleted before exiting LhA with an error
message, with this option you can force LhA to keep those
(often) partial files. This can be useful when trying to
recover data from corrupted archives - LhA will attempt to
extract the data from the erraneous archive file and put a
special filenote on the file to indicate that it failed the CRC
check and probably is corrupted.
NOTE
Please that in the current release, for certain
errors all data that has been extracted may not be in
the partially extracted file, because of internal I/O
buffering. In this case, set the I/O buffer to the
V1.38 LhA User's Guide Page 31
smallest value possible (8KB) to recover as much as
possible. Because of this, small files may not be
recovered at all. This only applies to LHA (-lh5-)
compression, LhArc compressed files will always have
all extracted data in the partially extracted file.
This option is OFF by default (partial files are deleted).
2.5.20 `-K' (move) Kill empty directories
When this option is used together with the move (`m')
command LhA will delete all directories that are empty after
moving all files to the archive. Useful for moving an entire
subdirectory tree with the `-r' (collect files recursively)
option.
This option is OFF by default (empty directories are not
deleted).
2.5.21 `-l' (ALL) Make filenames lowercase
This option, when active, will cause LhA to convert all
filenames to lowercase. This is useful when extracting files
from archives created on MSDOS systems, whose filenames are all
uppercase, which look completely braindead (IMHO). Use this
option to make them look nicer!
EXAMPLE
`LhA -l x myarc' will extract all files from
`myarc.(lzh|lha)', making all filenames lowercase.
This option if OFF by default
2.5.22 `-L' (ALL) Create filelist
When this option is enabled, it will cause LhA to create a
list of the files it has acted upon (i.e. what files in the
last operation that matched the action file specification you
gave on the command line). The name of the list file must
follow immediately after the `-L' string. If you need spaces in
the filename, enclose the name in double quotes.
EXAMPLE
`lha -Lram:ListFile d src.lzh *.asm' will delete all files
in `src.lzh' with names ending in `.asm' and create a list
of the deleted files in the file `ram:ListFile'.
`lha -L"ram:List File" u src.lzh *.asm' will update
`src.lzh', and create a list of the files that were
added/replaced in the file `ram:List File'.
V1.38 LhA User's Guide Page 32
NOTE
The file that this option creates is a plain ASCII
file with every name on a separate line. The files
created by this option are suitable for use as action
or exclude lists for LhA using the `@' or `-i'
options.
This option is OFF by default (no filelist created).
2.5.23 `-m' (ALL) No messages for query
When this option is active LhA will suppress all queries
that normally are issued before overwriting existing files for
example. Enabling this option will also cause LhA to ignore
TelOps (autoshow files). When this option is on you LhA will
behave like you choose the default action in response to all
the queries (yes). This option is automatically enabled if the
standard input is not interactive (if run in the background for
example).
This option if OFF by default.
2.5.24 `-M' (ext) No autoshow files
When this option is enabled, LhA will suppress the display
of autoshow files (files with names ending in `.displayme').
NOTE
Autoshow files are also suppressed if one or more of
the `-N', `-q' or `-m' options are enabled.
This option is OFF by default (autoshow files are
displayed).
2.5.25 `-n' (upx) No byte progress indicator
When this option is enabled, the byte progress indicator is
disabled. LhA will still display what file it is working on
however, use `-N' to disable all progress indication.
This option is OFF by default.
2.5.26 `-N' (all) No progress indicator
This option is similar to the `-n' option, but supresses
higher-level progress indication (i.e. the display of what
file LhA is bashing). It also disables the short copyright
banner that is printed at each invokation otherwise.
V1.38 LhA User's Guide Page 33
This option is off by default (file progress indication
ON).
2.5.27 `-p' (ALL) Pause after loading
When selected, this option will cause LhA to pause and wait
for the user to press any key before executing a command. This
is useful for users with floppies, who can then swap disks
after LhA has been loaded and is waiting for a keypress.
This option is OFF by default.
2.5.28 `-P' (ALL) Set task priority
This option is used to set the LhA process priority. The
priority may be set to any value in the range -5 to +5,
including 0. The higher priority you give LhA, the more CPU
time it will grab (processes with lower priority will almost
never get the chance to run since LhA is very
processor-intensive). Setting it to a low value (like -5) will
make LhA only use the processor time that nobody else wants
(nice when running LhA as a background task while running a
comm program).
The priority must be specified with a single (optionally
prefixed with a minus sign for negative priority) digit
immediately after the P as in:
EXAMPLE
`lha -P-1 a nonsense.lzh bogus.txt' will make LhA add the
file `bogus.txt' to the archive `nonsense.lzh', running at
priority -1.
The default priority is inherited from the calling process
(i.e. the CLI or program that called Execute()/RunCommand() ).
This is usually zero (0).
2.5.29 `-q' (ALL) Be quiet
This option will supress ALL messages from LhA.
This option is OFF by default
2.5.30 `-Q' (ALL) Alternate option set
This option character (`Q') will cause all following option
characters until next space character to be interpreted as
extended options. These are documented at the end of this
section.
2.5.31 `-r' (add) Collect action files recursively
V1.38 LhA User's Guide Page 34
When this option is used, LhA will recursively collect files
from subdirectories.
EXAMPLE
`lha -r a ram:disk1 df0:' will archive all files on the disk
in drive 0 to `ram:disk1.lha'.
`lha -r a ram:disk2src df0:*.c' will archive all `.c' files
on df0: to `ram:disk2src.lha'.
`lha -r a ram:exthup hd:prg/src/ lha/*.[chasi]
lhi/*.[chasi]' will add all `.c', `.h', `.a', `.s', `.i'
files in `hd:prg/src/lha' and `hd:prg/src/lhi' and their
subdirectories. The `hd:prg/src/' part of the names will not
be stored in the archive (home directory `hd:prg/src/' was
specified).
NOTE
Files that are specified explicitly (i.e. without any
pattern matching) are looked for only in the current
(home) directory, while patterns are used for
matching in all subdirectories. If a directory is
specified explicitly without any following file
pattern (like in `lha -r a ram:test sys:l') it will
be treated as if a `/*' was appended to the directory
name - i.e. all files in the directory and it's
subdirectories will be archived.
This option is OFF by default. Note that the `-x' option is
automatically enabled when the -r option is used. If you do not
want to store pathnames simply specify `-x0' on the command
line.
2.5.32 `-R' (ALL) Collect archive files recursively
When this option is enabled LhA will search for archive
files recursively using the archive file specification given at
the command line. This works like the `-r' option but for
archive files.
EXAMPLE
`lha -R l dh0:files/a*' will list the contents of all
archive files whose names begin in `a' in directory
`dh0:files' and its subdirectories.
`lha -R l *' will list the contents of all archive files in
the current directory and its subdirectories.
`lha -R l myarc' will list the contents of all archives
V1.38 LhA User's Guide Page 35
called 'myarc.lzh' or `myarc.lha' in the current directory
and its subdirectories.
This option is OFF by default.
2.5.33 `-s' (add) Add files with a-flag unset
When this option is active, LhA will only add files which
have the A (for Archived) file protection flag unset. This is
useful for doing incremental backups together with the `-S'
option.
This option is OFF by default (add files regardless of file
protection flags).
2.5.34 `-S' (add) Set A-flag on archived files
When this option is on, LhA will set the A (for Archived)
file protection flag on all files that are added to an
archive. This can be used to simplify automatic backups when
used together with the -s (Add files without A-flag only). See
previous section for more details.
This option is OFF by default.
2.5.35 `-t' (ext) Only new files
When this option is active, LhA will not overwrite or
replace any files.
NOTE
This option overrides the `-T' option.
This option is OFF by default.
2.5.36 `-T' (upx) New and newer files
When this option is active, LhA will overwrite or replace
files that already exists and are older than the current file,
and create files that does not already exist.
NOTE
This option overrides the `-t' option.
This option is OFF by default.
2.5.37 `-u' (ALL) Make filenames uppercase
V1.38 LhA User's Guide Page 36
This option, when active, will force LhA to convert all
filenames to uppercase. This can be useful when making
archives that are supposed to be used on MSDOS-Systems running
LhArc/LHA. While these have no problems with extracting files
with mixed-case filenames, the pattern matching routines will
not work correctly.
This option is OFF by default.
2.5.38 `-U' (upx) Set update interval
This option is used to set the interval (in bytes) at which
LhA updates the byte progress indicator. The desired interval
must be expressed in kilobytes, and must immediately follow the
`U' character.
EXAMPLE
`LhA -U4096 a bar.lzh *.c' will add all c-source files in
the current directory to `bar.lzh' with a progress indicator
interval of 4096 (4K) bytes.
`LhA -U32768 a bar.lzh *.c' will do the same as the example
above, but with a update interval of 32768 bytes (32K).
NOTE
This option does currently not affect the update rate
of the LHA decompression (`-lh5-' compression mode).
When LhA decompresses files with this compression
mode, the update rate will be whatever I/O buffer
size is used (set with the `-b' option). The reason
of this behaviour is that the normal progress
indication would slow down decompression.
The default update interval is 8192 (8K) bytes for -lh1- and
-lh5- compression and 4096 (4K) bytes for -lh1- decompression.
The update rate for -lh5- decompression is determined by the
I/O buffer size setting (see note above).
2.5.39 `-v' (add) Set compression speed
This option can be used to increase or decrease the
compression speed. -v0 is the slowest, and -v9 is the fastest.
As usual you can't get anything for free, so compression
performance is slightly looser with -v9 than with -v0 but the
difference in speed can be significant (especially with some
binary graphics data). Higher compression speed is attained by
using less statistics in the compression phase.
The default compression speed is 5 - best in 99% of all
cases.
V1.38 LhA User's Guide Page 37
2.5.40 `-V' (all) Enable multi-volume archives.
This option enables the multi-volume feature of LhA. Note
that in the evaluation version you cannot create or update
multivolume archives, only extract from and list. Please
consult the section about multi-volume archives for more
information. Further options must be separated from the `V' by
at least one whitespace character. In the registered version,
the desired volume size in KB should be specified after the `V'
character. If you want LhA to automatically detect what volume
size it should use, use `-Va' (for `use all available space').
EXAMPLE
`LhA -Va a df0:MyArc *.c' would archive all files in the
current directory with names ending in `.c' to DF0: if the
disk should get full before the archive is finished LhA will
prompt for a new disk to be inserted.
This option is OFF by default.
2.5.41 `-w' (upd) Set work directory
This option is used to specify what directory LhA should use
to store temporary files. Temporary files are created when
adding files to archives, or when updating an archive in some
way (like deleting or freshening files). The work directory
name must be specified immediately after the `-w' string.
EXAMPLE
`LhA -wrad:tmp a MyArc.lzh *' will use the directory
`rad:tmp' as temporary storage location when adding all
files in the current directory to the archive `MyArc.lzh'.
By default LhA uses the `T:' directory for temporary files,
if this assign or device does not exist, LhA will use the
current directory.
2.5.42 `-W' (add) Exclude filenames
This option is not available in the current version.
2.5.43 `-x' (all) Preserve and use pathnames
As of LhA V1.30, this option comes in three flavors, which
mode LhA will use depends on the digit (if any) that follows
the `x'.
`-x1' or `-x': When this option is enabled, LhA will use and
preserve pathnames when extracting and archiving files. When
extracting, LhA will create the directories that does not
already exist. Use this option when you want to preserve some
directory structure. This option is automatically enabled when
V1.38 LhA User's Guide Page 38
the `-r' option is used.
`-x2': In this mode, which is only useful with the extract
commands, LhA will use the full paths of the files in the
archive when selecting files to extract, but disregard them
when extracting. Useful when several files with the same
filename (but different paths) exists in the archive.
`-x3': This mode is the opposite of `-x2'. LhA disregards
paths when selecting files to extract, but uses them when
extracting. Useful when you're too lazy to remember the exact
name including path.
EXAMPLE
`LhA -x2 e dl:rexx.lzh examples/Main.c ram:' would extract
the file `examples/Main.c' from the archive to
`ram:Main.c'.
`LhA -x3 e dl:src.lzh #?Main#? ram:' would extract all files
with names containing `Main'. Notice that this is not
equivalent to the `LhA x dl:src.lzh #?Main#? ram:' since the
latter would extract files like `dir/Maindir/file1.h' as
well.
This option is disabled (`-x0') by default for update
operations and enabled (`-x1') by default for extract
operations.
2.5.44 `-X' (ALL) Do not append suffix
When this option is enabled, LhA will not append an `.lzh'
or `.lha' suffix to the given archive name. The default
behaviour is to append a suffix of `.lha' or `.lzh' (suffix is
chosen depending on compression mode) if the name does not
already have an extension.
This option is OFF by default (suffixes are appended).
2.5.45 `-y' (all) Always append suffix
When this option is enabled, LhA will always append a `.lzh'
or `.lha' suffix to the archive name, even when the archive
name already contains a suffix.
This option is OFF by default (a suffix is appended only if
there is no suffix in the archive name already).
2.5.46 `-Y' (add) Store big files with ratio
When this option is enabled, LhA will store big files
V1.38 LhA User's Guide Page 39
(>32KB) without compression if compression ratio is lower than
3%. This is because extraction times of these files are long on
slower machines.
This option is OFF by default (all files are compressed).
2.5.47 `-z' (add) Do not compress files
This option, when active, will force LhA to store all
updated or added files in the archive without attempting to
compress them. Useful for making fast backups where archive
size is of no importance. It is not advisable to use this
option when making archives for distribution via modem or
networks since the archive will end up much larger than if it
was compressed.
EXAMPLE
`lha -z a foo.lha *.bmp' Will store all files in the current
directory with a suffix of `.bmp' in the archive file
`foo.lha' without compressing them.
This option is OFF by default.
2.5.48 `-Z' (add) Compress archives
This option will cause LhA to attempt compressing already
compressed files.
By default, LhA will not attempt to compress files which are
already compressed (typically archive files or picture files in
GIF or JPEG format). The file type is determined from the
suffix, and files with names ending in `.lzh', `.lha', `.zoo',
`.zip', `arj', `.arc', `.dms', `.wrp', `.lhw', `.zap', `.pak',
`.pp', `.gif', or `.jpg'.
The reason why already compressed files should not be
compressed is that the number of bytes gained by this is so
small that it is not worth the time spent
compressing/decompressing it.
This option is OFF by default.
2.5.49 `-0' (add) Use LhArc 1.x compression
This option causes LhA to use the old -lh1- compression
method when updating archives. This compression method is
slightly faster than the normal -lh5- compression but has
looser compression and is much slower to decompress.
When this compression mode is used, LhA defaults to
appending a suffix of `.lzh' when creating archives.
V1.38 LhA User's Guide Page 40
When this option is specified, option `-2' is automatically
deactivated.
By default the -lh5- compression is used.
2.5.50 `-1' (add) Use LhA compression (-lh4-)
This option causes LhA to use the new -lh4- compression
method when updating archives. This compression method is
slightly faster than the -lh5- compression but has looser
compression and is generally slightly slower to decompress.
When this compression mode is used, LhA defaults to
appending a suffix of `.lha' when creating archives.
2.5.51 `-2' (add) Use LhA compression (-lh5-)
This option causes LhA to use the new -lh5- compression
method when updating archives. This compression method is
slightly slower than the old -lh1- compression but has tighter
compression and is much faster to decompress.
When this compression mode is used, LhA defaults to
appending a suffix of `.lha' when creating archives.
When this option is specified, option `-0' is automatically
deactivated.
This is the default compression mode.
2.5.52 `-Qa' (all) Use simple console I/O
When this option is enabled LhA will not try to do any fancy
stuff like examining the size of the console window, or turning
off or repositioning the cursor. Enabling this option also
disables the byte progress indicator (like with `-n'), since
this requires cursor repositioning.
This option is OFF by default.
2.5.53 `-Qb' (ext) Test archive before extract
When this switch is enabled LhA will test an archive's
integrity before extracting. If the archive fails the integrity
check, the archive is not extracted from at all. Useful in
certain FIDO BBS setups.
This option is OFF by default.
2.5.54 `-Qd' (ext) Delete autoshow files
When this option is enabled LhA will delete autoshow files
V1.38 LhA User's Guide Page 41
after displaying them.
This option is OFF by default.
2.5.55 `-Qh' (add) Set Huffman buffer size
This option can be used to set the size of the buffer used
in LHA compression (default or selected with the `-2' or `-1'
options) for collecting statistics. The size of this buffer
affects the compression ratio in unpredictable ways (you cannot
tell with certainty whether a large buffer will be better or
worse). As a general rule, keep this at the default, but if you
are compressing homogenous data with a relatively fixed
relative frequency of symbols (like text files), setting this
to a large value will improve compression. Binaries generally
compress best with the default setting.
The Huffman buffer may be of any size between 4K and 64K and
must be specified immediately following the `-Qh' string, in
kilobytes.
EXAMPLE
`LhA -Qh32 -2 a foo.lha *' will compress all files in the
current directory using a Huffman buffer size of 32768 (32K)
bytes.
`LhA -Qh4 -2 a foo.lha *' will compress all files in the
current directory using a Huffman buffer size of 4096 (4K)
bytes.
The default Huffman buffer size is 16K.
2.5.56 `-Qn' (all) Set national character mode
When this option is enabled, LhA will correctly convert
national characters to upper/lowercase. By default LhA does not
convert any characters with the MSB set due to the fact that
older (pre-2.1) filesystems does not correctly handle national
characters when computing hash values. This switch should be
used when national filesystems are used (NOFS/NFFS).
This option is OFF by default.
2.5.57 `-Qo' (all) Ignore options after command
When this option is enabled LhA will not search the command
line for options beyond the archive name. This option is useful
if you need to specify files with names beginning in `-'.
This option is OFF by default.
V1.38 LhA User's Guide Page 42
2.5.58 `-Qp' (move) Ignore delete protection flag
When you enable this option LhA will delete files with the
delete protection flag set when using the `m' (move) command.
This option is OFF by default (delete protected files are
not deleted).
2.5.59 `-Qq' (add) Quick add
When this option is enabled, LhA will not scan through the
archive looking for duplicate files before adding to the
archive. This can be useful when adding one file at a time to a
large archive, knowing the archive does not contain a file by
the same name (as is the case in some FIDO BBS setups).
This option is OFF by default.
2.5.60 `-Qr' (add) Skip datestamp check
This option, when on, disables the datestamp comparison for
the update (`u') and freshen (`f') commands, so that the files
that already exist in the archive will be replaced regardless
of file modification dates.
This option is OFF by default for all commands but `r'.
2.5.61 `-Qw' (all) Disable wildcards
When you specify this option LhA will not do any wildcard
matching. This is useful for adding files with (illegal) names
containing wildcard characters (`()#?~%|*').
This option is OFF by default.
2.6 Autoshow files
Autoshow files are files that are displayed automatically to
the user when extracting the file from an archive. LhA
determines if a file should be displayed by looking at the
filename; if the filename ends in `.displayme' then the file is
displayed unless autoshow files have been disabled (with the
`-M' option). Apart from being displayed on-screen, autoshow
files are extracted just like normal files, without stripping
off the `.displayme' part (AmigaDOS LhArc 1.30 does this).
2.7 Residentability
LhA is multitasking reentrant and pure, and it can be made
resident with the standard shell resident commands - `resident'
under AmigaShell 1.3 and 2.0, and `resi' under WShell. If you
use another shell, please refer to the shell's user manual for
V1.38 LhA User's Guide Page 43
information about how to make programs resident.
2.8 Multi-volume archives
Multi-volume archives are created simply by splitting a
larger archive into smaller files. The evaluation version does
not do this automatically on the fly (but the registered
version does), so you will need to do it manually unless you
register.
The source for two utilities used to create multivolume
archives are included in the distribution archive. If you have
access to a C compiler you can compile the (hopefully) portable
`splitlzh' and `joinlzh' programs simply by entering `make' in
the `unixutil' directory. These two programs are useful when
transferring big archives to and from **IX systems.
2.8.1 Multivolume file names
The first file of a multivolume archive is named `name.lha'
or `name.lzh'. The following volumes are named `name.l01',
`name.l02' and so on. Multivolume archives spanning more than
100 volumes are not currently supported.
2.9 A bit about headers
A `header' has to be written to the archive for every file
in order for the archiver to know what the files are called,
how they were compressed etc. The original LhArc had a very
primitive header layout and had no good way of storing any
machine-specific info like filenotes (I created a workaround in
LhArcA 0.99, by putting the filenote in the filename field -
LhArc and LZ later adopted this method). In **IX LhArc V1.02
the authors introduced a new type of header (level 1 header)
that allowed slightly more info to be stored, but the header
length was still limited to 255 bytes. In LHA 2.13 for MS-DOS a
new header type was introduced - level 2 headers. With this
latest header type an arbitrary amount of information can be
stored. LhA can both read and write all these header types. To
select what type of headers to write, use the `-H' option. LHA
for MSDOS and LHa for **IX creates level-1 headers by default.
LhA uses level 0 headers by default for compatibility reasons
(LZ and LhArc does not handle level 1 and level 2 headers
correctly). If you want to know what header levels an archive
contains, use the `vv' command.
2.10 Some tips for archiving efficiently
If you are going to archive a big bunch of similar or small
files - text files for example - you can improve compression
performance greatly by first creating an archive WITHOUT
compression (using the `-z' option), and then add this file to
V1.38 LhA User's Guide Page 44
archive (with compression). As an example I added a big
directory with various sources and some binaries (total 2480
files, 5102117 bytes). this way with:
LhA -z -r a hd:test msrc:
and then compressed it with
LhA -Z -Qh64 a hd:msrc hd:test.lha
The final `hd:msrc.lha' archive ended up being 1545076 bytes.
When compressed the normal way (`LhA -r -Qh64 a hd:msrc
msrc:'), the archive was 2114777 bytes long. Quite a
difference..
2.11 Using as little memory as possible
When using the default settings, LhA requires about 300KB to
archive, and 180KB to extract files. To reduce this to a
minimum you can reduce the I/O buffer size to 8K. This will
save you about 48K when archiving and at least 24K when
extracting. You can reduce the archiving memory usage even more
by reducing the Huffman buffer size to 4K, but it is not
recommended since compression performance will drop
significantly. Please note that the above figures for memory
usage includes stack and program code.
2.12 Creating fully MS-DOS compatible archives
In order to satisfy MSDOS archivers, you may have to disable
a few Amiga-specific features. Filenotes are not supported
under MSDOS and thus the filenote archiving should be disabled
with the `-f' option. Furthermore you should disable file
attribute preservation with the `-a' option. Autoshow files are
not supported by MSDOS LHA V2.13. If you use header level 1 or
2 you don't have to worry about disabling the file attribute
preservation. LHA V2.13 for MSDOS and LHa 0.04 for **IX creates
level 1 headers by default.
To summarize, use the following options to create archives
for use with MSDOS LHA:
`-H0a0f'
In order to create archives that are extractible with LhArc
the following options should be used when creating archives:
`-H0 -0'
and for MS-DOS LHarc:
`-H0a0f -0'
V1.38 LhA User's Guide Page 45
2.13 Recovering data from corrupt archives
It is never possible to recover all lost data from a corrupt
archive, but you can retrieve as much data as possible by using
the `-k' option and a small I/O buffer (8K). An example would
be:
LhA -k -b8 x dl:Corrupt ram:
This would extract as much as possible from the corrupt
archive to `ram:'.
5 Acknowledgements
Haruyasu Yoshizaki For releasing the source of the original LHA
for MSDOS. The source was used as a
reference when writing this program. No
actual code was copied from this source,
rather LhA was written from scratch for
the Amiga.
Haruhiko Okumura For devising the -lh5- and -lh4- compression
algorithms, and for releasing the C source
for these to the public domain. These
sources were used as a reference when
writing the 680x0 assembler versions of
the compression code. Some algorithms
were replaced with my own, faster ones but
the ideas are the same.
Robert K.Jung For making the feature-packed ARJ for MSDOS, from
which several ideas for commands and
features for LhA were taken.
Paolo Zibetti For making the first LhArc-style archiver for the
Amiga, which made me interested in file
archivers and more advanced data
compression techniques.
Ron Birk For digging out the source codes I needed before I
gained access to InterNet myself - Thanks!
Martin Olsson For supplying me with the source for LhA V2.11,
which was used as a reference. (I wrote
the -lh5- decompression with only the
80x86 source available.. hard work!)
LhArcA users Big thanks to all of you who registered for LhArcA
and LhA even before the programs were
finished (LhArcA never was, but those who
V1.38 LhA User's Guide Page 46
registered will receive LhI/LhA when it's
finished).
LhA users Big thanks to all who registered so far, and even
bigger thanks to those who reported bugs
and problems with the previous releases -
without you this program would never be
what it is now.
The license agreement was heavily inspired by the TrapDoor
license, which in turn was inspired by Jack Radigan and the GNU
General public License.
The manual was formatted with a modified version of `proff'
(originally written for VAX/VMS/MSDOS by Ozan S. Yigit and
Steven Tress).
The program was developed using the Lattice C Compiler and
Assembler on a 25MHz Amiga 3000. Great compiler, great
computer! Furthermore RCS and MKID were used to simplify the
maintenance and development process greatly.
Inspiration provided (in order of significance) by Emma,
Depeche Mode, Recoil, Pet Shop Boys, Erasure, OMD, Electronic,
The KLF/JAMS, Yazoo, Tears for Fears, Simple Minds and
Kraftwerk!!
"Infinities of dreams imploding into one ..."
Table Of Contents
LhA V1.38
1 - Introduction ..................................... 1
1.1 About the manual ............................... 1
1.2 System requirements ........................... 1
1.4 Terminology .................................. 1
1.5 LhA - what is it? ................................ 2
1.6 What is a file archiver anyway? ................... 2
1.8 Compatibility and Amiga-specific features ....... 4
1.9 About the author program history and future........ 4
2 Reference guide .................................... 5
2.1 Command line syntax ............................ 5
2.1.1 Specifying options ....................... 5
2.1.2 Specifying commands ...................... 5
2.1.3 Specifying archives ...................... 5
2.1.4 Specifying action files ................... 6
2.1.5 Home directories ......................... 6
2.1.6 Recursive file collection ................. 7
2.1.7 Specifying destination directory .......... 9
2.1.8 `@'-files ............................... 9
2.1.9 LhA limitations .......................... 9
2.2 Environment variables ......................... 10
2.3 Pattern matching .............................. 11
2.3.0 Exactly what is pattern matching anyway? ..... 11
2.3.1 Accepted pattern tokens ................... 11
2.3.1.1 Question mark (?) .................... 11
2.3.1.2 Star/Asterisk (*) ................... 12
2.3.1.3 Hash mark (#) ........................ 12
2.3.1.4 Square brackets ([]) ................. 12
2.3.1.5 Parentheses and the vertical bar ....... 13
2.3.1.6 Tilde (~) ........................... 14
2.3.1.7 Percent sign (%) ..................... 14
2.3.2 KS1.3 ARP and KS2.x pattern matching ......... 15
2.3.3 National characters ...................... 15
2.4 Commands ..................................... 16
2.4.1 `a' Add files to archive .................... 16
2.4.2 `c' Concatenate/Append archives ........... 16
2.4.3 `d' Delete files from archive ............... 17
2.4.4 `e' Extract files from archive .............. 17
2.4.5 `f' Freshen files in archive ................ 18
2.4.7 `h' Hunt for diffs arc <-> filesys............ 18
2.4.8 `l' List archive contents (terse) ........... 19
2.4.8.1 `lq' List archive (terse-quick) ....... 20
2.4.9 `m' Move files to archive ................... 20
2.4.14 `p' Print files to stdout .................. 20
2.4.15 `r' Replace files ........................ 20
2.4.17 `t' Test archive integrity ................ 21
2.4.18 `u' Update archive ....................... 21
2.4.19 `v' List archive (verbose) ................ 21
2.4.19.1 `vq' List archive (verbose-quick) .... 22
- I -
2.4.20 `vv' List archive (full) .................. 22
2.4.21 `x' Extract files with path ................ 23
2.4.22 `y' Copy archive with new options ........... 23
2.5 Options ...................................... 24
2.5.1 `-a' (upx) Preserve file attributes ......... 24
2.5.2 `-A' (upd) Set archive attributes ........... 25
2.5.3 `-b' (all) Set I/O buffer size ............... 25
2.5.4 `-B' (upd) Keep backup of archives ........... 26
2.5.5 `-c' (all) Confirm files ................... 26
2.5.6 `-C' (ext) Clear arc-bit on extract .......... 26
2.5.6 `-d' (upd) Archive date=newest file ......... 26
2.5.8 `-D' (all) Alternate progress display ....... 26
2.5.9 `-e' (add) Archive empty directories ........ 27
2.5.10 `-E' (ext) Touch extracted files ........... 28
2.5.11 `-f' (all) Ignore filenotes ............... 28
2.5.12 `-F' (all) Use fast progress display ........ 28
2.5.13 `-g' (add) Garble files with password ....... 29
2.5.14 `-G' (ext) Only extract newer files ......... 29
2.5.15 `-h' (add) Disable homedirectories ........ 29
2.5.16 `-H' (add) Write header level .............. 29
2.5.17 `-i' (all) Read filelist from file .......... 29
2.5.18 `-I' (all) Ignore LHAOPTS variable ......... 30
2.5.19 `-k' (all) Keep partial files .............. 30
2.5.20 `-K' (move) Kill empty directories ......... 31
2.5.21 `-l' (ALL) Make filenames lowercase ........ 31
2.5.22 `-L' (ALL) Create filelist ................ 31
2.5.23 `-m' (ALL) No messages for query ............ 32
2.5.24 `-M' (ext) No autoshow files ............... 32
2.5.25 `-n' (upx) No byte progress indicator ....... 32
2.5.26 `-N' (all) No progress indicator ........... 32
2.5.27 `-p' (ALL) Pause after loading ............. 33
2.5.28 `-P' (ALL) Set task priority ............... 33
2.5.29 `-q' (ALL) Be quiet ....................... 33
2.5.30 `-Q' (ALL) Alternate option set ............ 33
2.5.31 `-r' (add) Collect action files recursively . 33
2.5.32 `-R' (ALL) Collect archive files recursively 34
2.5.33 `-s' (add) Add files with a-flag unset....... 35
2.5.34 `-S' (add) Set A-flag on archived files...... 35
2.5.35 `-t' (ext) Only new files .................. 35
2.5.36 `-T' (upx) New and newer files .............. 35
2.5.37 `-u' (ALL) Make filenames uppercase ........ 35
2.5.38 `-U' (upx) Set update interval ............. 36
2.5.39 `-v' (add) Set compression speed ........... 36
2.5.40 `-V' (all) Enable multi-volume archives. ... 36
2.5.41 `-w' (upd) Set work directory .............. 37
2.5.42 `-W' (add) Exclude filenames .............. 37
2.5.43 `-x' (all) Preserve and use pathnames ....... 37
2.5.44 `-X' (ALL) Do not append suffix ............. 38
2.5.45 `-y' (all) Always append suffix ............ 38
2.5.46 `-Y' (add) Store big files with ratio........ 38
2.5.47 `-z' (add) Do not compress files ............ 39
2.5.48 `-Z' (add) Compress archives .............. 39
- II -
2.5.49 `-0' (add) Use LhArc 1.x compression ........ 39
2.5.50 `-1' (add) Use LhA compression (-lh4-) ...... 40
2.5.51 `-2' (add) Use LhA compression (-lh5-) ...... 40
2.5.52 `-Qa' (all) Use simple console I/O .......... 40
2.5.53 `-Qb' (ext) Test archive before extract ..... 40
2.5.54 `-Qd' (ext) Delete autoshow files .......... 40
2.5.55 `-Qh' (add) Set Huffman buffer size ......... 41
2.5.56 `-Qn' (all) Set national character mode ..... 41
2.5.57 `-Qo' (all) Ignore options after command .... 41
2.5.58 `-Qp' (move) Ignore delete protection flag .. 41
2.5.59 `-Qq' (add) Quick add ..................... 42
2.5.60 `-Qr' (add) Skip datestamp check ........... 42
2.5.61 `-Qw' (all) Disable wildcards ............. 42
2.6 Autoshow files ................................ 42
2.7 Residentability .............................. 42
2.8 Multi-volume archives ......................... 43
2.8.1 Multivolume file names ....................... 43
2.9 A bit about headers ............................. 43
2.10 Some tips for archiving efficiently ............. 43
2.11 Using as little memory as possible ............... 44
2.12 Creating fully MS-DOS compatible archives ....... 44
2.13 Recovering data from corrupt archives ........... 44
5 Acknowledgements .................................. 45
- III -